package com.yun.simplequeue;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;
import org.junit.Test;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Provider {

    @Test
    public void provder() throws IOException, TimeoutException {
       //创建mq的连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置rabbitmq连接服务器
        factory.setHost("192.168.231.131");
        //设置端口
        factory.setPort(5672);
        //用户名
        factory.setUsername("guest");
        //密码
        factory.setPassword("guest");
        //设置需要连接的那台虚拟机
        factory.setVirtualHost("/");
        //创建连接
        Connection connection = factory.newConnection();
        //创建通道
        Channel channel = connection.createChannel();
        //通道绑定队列
        /**
         * 通道绑定队列
         * queueDeclare():当队列中没有队列时，会自动创建队列。一个通道可以给多个队列发消息
         * 参数1：queue: 队列名称
         * 参数2：durable: 确认队列是否需要持久化（是否在磁盘中保存队列）
         *     false：不持久化（重启rabbit服务后，队列会消失，并且队列中的消息也会丢失）
         *     true：持久化，但默认不会持久化队列中的消息
         *     注意:消费者在消费时要与生产者的是否持久化保持一致
         * 参数3：exclusive: 是否独占队列 值 true、false ，设置为true时表示次队列只能被当前通道绑定，不能和其它通道绑定。
         * 参数4：autoDelete: 是否在消费完后自动删除队列 注意:消费者在消费时要与生产者的是否持久化保持一致
         * 参数5：arguments:
         */
        channel.queueDeclare("hello",true,false,true,null);
        /**
         * 发布消息
         * 参数1：exchange-交换机名称
         * 参数2：routingKey-路由键
         * 参数3：消息持久化操作 PERSISTENT_TEXT_PLAIN持久化消息
         * 参数4：
         *
         */
        channel.basicPublish("","hello", MessageProperties.PERSISTENT_TEXT_PLAIN,"hello rabbitmq".getBytes());
        channel.close();
        connection.close();
    }
}
